package main

import (
	"fmt"
	"math/rand"
	"sort"
	"time"
)

//=====================================作业一==================================
func Reply() {
	//	s1 := make([]int, 3, 4)
	//	s2 := append(s1, 1)
	/*
		请问s1、s2内各有什么元素？
		答：
		s1 [0,0,0]
		s2 [0,0,0,1]

		s1修改一个元素会影响s2吗？s2修改一个元素会影响s1吗？
		答：会                   会
		s2再增加一个元素会怎么样？
		答： s2增加一个元素后  底层数组撑爆， 将和s1底层数据分道扬镳
	*/
}

//==================================作业二=======================================
//有一个数组 [1,4,9,16,2,5,10,15]，生成一个新切片，要求新切片元素是数组相邻2项的和
func Newslice() {
	var count int
	s := [...]int{1, 4, 9, 16, 2, 5, 10, 15}
	s1 := make([]int, 0, len(s))
	for i := 0; i < len(s)-1; i++ {
		count = s[i] + s[i+1]
		s1 = append(s1, count)
	}
	fmt.Print(s1)
}

//=====================================作业三======================================
/*
3、数字重复统计
随机产生100个整数
数字的范围[-100, 100]
降序输出这些生成的数字并打印其重复的次数
*/
func Statistics() {
	rd := rand.New(rand.NewSource(time.Now().UnixNano()))
	var dict = make(map[int]int, 0)
	var s = make([]int, 0, 100)
	for i := 0; i < 100; i++ {
		num := rd.Intn(200) - 100
		s = append(s, num)
	}
	//排序
	sort.Sort(sort.Reverse(sort.IntSlice(s)))
	//统计
	for _, v := range s {
		//判断key是否有对应的值
		_, ok := dict[v]
		if ok {
			dict[v] += 1
		} else {
			dict[v] = 1
		}
	}
	fmt.Println(dict)
	//map使用for循环可以判定 是否存在key值
}

func main() {
	Statistics()
}
